package com.dmjj.common.util;

import com.dmjj.common.base.CreateManEntity;
import com.dmjj.common.base.LoginEntity;
import com.dmjj.common.base.UpdateManEntity;

import java.lang.reflect.Field;
import java.lang.reflect.Method;


/**
 * @Author zhangxue
 * @Description //TODO 插入创建人、创建时间
 * @Date 10:50 2019/4/21
 * @Param 
 * @return 
 **/
public class InsertCreatManInfo {
    public static  <T> T Update(T beforeUpdate, LoginEntity update){
        try {
            if(beforeUpdate==null){
                return null;
            }
            if(update==null){
                return null;
            }
            CreateManEntity updateMap = new CreateManEntity();
            updateMap.setCreatemanno(update.getUserid());
            updateMap.setCreatemanname(update.getName());
            Class<? extends Object> clazz = beforeUpdate.getClass();
            Class<? extends Object> clazzUpdate = updateMap.getClass();
            Field[] fields = clazzUpdate.getDeclaredFields();//得到要修改的对象的属性数组
            for (int i=0;i<fields.length;i++){
                Field field = fields[i];   //得到每个属性
                field.setAccessible(true);  //打破封装
                String name = field.getName();  //得到属性名
                Class type=field.getType();     //得到该属性的类型
                Object value = field.get(updateMap); //得到该属性的get方法的值
                if(value!=null){
                    //找到与原对象相同的属性的set方法
                    Method m=clazz.getMethod("set"+upperCase(name),type);
                    m.invoke(beforeUpdate,value);//给该方法设置值
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return beforeUpdate;
    }

    public static  <T> T UpdateUpdate(T beforeUpdate, LoginEntity update){
        try {
            if(beforeUpdate==null){
                return null;
            }
            if(update==null){
                return null;
            }
            UpdateManEntity updateMap = new UpdateManEntity();
            updateMap.setEditmanno(update.getUserid());
            updateMap.setEditmanname(update.getName());
            Class<? extends Object> clazz = beforeUpdate.getClass();
            Class<? extends Object> clazzUpdate = updateMap.getClass();
            Field[] fields = clazzUpdate.getDeclaredFields();//得到要修改的对象的属性数组
            for (int i=0;i<fields.length;i++){
                Field field = fields[i];   //得到每个属性
                field.setAccessible(true);  //打破封装
                String name = field.getName();  //得到属性名
                Class type=field.getType();     //得到该属性的类型
                Object value = field.get(updateMap); //得到该属性的get方法的值
                if(value!=null){
                    //找到与原对象相同的属性的set方法
                    Method m=clazz.getMethod("set"+upperCase(name),type);
                    m.invoke(beforeUpdate,value);//给该方法设置值
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return beforeUpdate;
    }

    public static String upperCase(String str) {
        char[] ch = str.toCharArray();
        ch[0] = (char) (ch[0] - 32);
        return new String(ch);
    }

}
